package cn.wolfcode.trip.api.controller;

import cn.wolfcode.trip.base.domain.Region;
import cn.wolfcode.trip.base.domain.Strategy;
import cn.wolfcode.trip.base.query.StrategyQueryObject;
import cn.wolfcode.trip.base.service.IRegionService;
import cn.wolfcode.trip.base.service.IStrategyService;
import com.github.pagehelper.PageInfo;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Copyright: Copyright (c) 2019 Super520
 * 描述：旅游地区资源控制器
 *
 * @package: cn.wolfcode.trip.api.controller
 * @author: Patch
 * @date: 2019/5/22 9:46
 * 总结:
 */
@RestController
@RequestMapping("regions")
public class RegionController {
    @Autowired
    private IRegionService regionService;
    @Autowired
    private IStrategyService strategyService;
    @Autowired
    private ServletContext servletContext;

    /**
     * 获取所有旅游地区接口
     *
     * @return
     */
    @GetMapping
    public List<Region> list(Long state) {
        return regionService.listAll(state);
    }

    /**
     * 获取某个地区下的攻略数据(返回HTML)
     * 1.资源： /regions/{id}
     * 2.请求方式 get
     * 3.请求参数 待定
     * 4.返回结果 局部html
     */
    @GetMapping(value = "{regionId}/strategies", headers = "accept=text/html")
    public void query(StrategyQueryObject qo, HttpServletResponse response) throws IOException, TemplateException {
        // 获取该地区下的所有推荐的攻略（查全部）
        // pageSize为0，不会进行分页
        qo.setPageSize(0);
        qo.setState(Strategy.STATE_HOT);// 状态为热门
        PageInfo<Strategy> hot = strategyService.query(qo);
        // 获取该地区下的所有攻略（分页）
        qo.setPageSize(4);// 分页
        qo.setState(null);// 不需要状态
        qo.setNotDisable(true); // 非禁用的
        PageInfo<Strategy> all = strategyService.query(qo);
        System.out.println(all);

        // 需要渲染的数据
        Map root = new HashMap();
        root.put("hot", hot);
        root.put("all", all);

        // 创建freemarker的配置对象
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
        // 指定模板文件所在的文件目录
        cfg.setDirectoryForTemplateLoading(new File(servletContext.getRealPath("templates")));
        // 设置文件的编码
        cfg.setDefaultEncoding("utf-8");
        // 获取模板文件
        Template template = cfg.getTemplate("temp.ftl");
        // 设置响应类型，编码
        response.setContentType("text/html;charset=utf-8");
        // 合并模板和数据
        template.process(root, response.getWriter());

    }

    /**
     * 获取某个地区下的攻略数据(json)
     * 1.资源： /regions/{id}
     * 2.请求方式 get
     * 3.请求参数 待定
     * 4.返回结果 分页json
     */
    @GetMapping(value = "{regionId}/strategies", headers = "accept=application/json")
    public PageInfo query(StrategyQueryObject qo) {
        qo.setPageSize(4);
        return strategyService.query(qo);
    }

}
